/**
 *
 */
function stringValid(args) {
    if (args.indexOf("%") > -1) {
        return false;
    } else if (args.indexOf("*") > -1) {
        return false;
    } else if (args.indexOf("&") > -1) {
        return false;
    } else if (args.indexOf("$") > -1) {
        return false;
    } else if (args.indexOf("#") > -1) {
        return false;
    } else if (args.indexOf("￥") > -1) {
        return false;
    } else if (args.indexOf("……") > -1) {
        return false;
    } else if (args.indexOf("——") > -1) {
        return false;
    } else if (args.indexOf("`") > -1) {
        return false;
    } else if (args.indexOf("~") > -1) {
        return false;
    } else if (args.indexOf("!") > -1) {
        return false;
    } else if (args.indexOf("@") > -1) {
        return false;
    } else if (args.indexOf("^") > -1) {
        return false;
    } else if (args.indexOf("/") > -1) {
        return false;
    } else if (args.indexOf("\\") > -1) {
        return false;
    } else if (args.indexOf("'") > -1) {
        return false;
    } else if (args.indexOf("\"") > -1) {
        return false;
    } else if (args.indexOf("?") > -1) {
        return false;
    }
    else {
        return true;
    }
}

function compare(flag) {
    if (flag) {
        return flag;
    } else {
        return !flag;
    }
}

function englishValid(arg) {
    var parent = /^[A-Za-z]+$/;
    var flag = parent.test(arg);
    compare(flag);
}

function chineseValid(arg) {
    var parent = /^[\u4e00-\u9fa5]+$/;
    var flag = parent.test(arg);
    compare(flag);
}

//数字正则
function mathValid(arg) {
    var parent = /^[0-9]+$/;
    var flag = parent.test(arg);
    compare(flag);
}

function emailValid(arg) {
    var parent = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;
    var flag = parent.test(arg);
    compare(flag);
}

function noChineseValid(arg) {
    var parent = /.*[\u4e00-\u9fa5]+.*$/;
    var flag = parent.test(arg);
    compare(flag);
}

//空指针判断
function NullOrUndefined(str) {
    if (str === null || str == "" || str == undefined) {
        return true
    }
    return false;
}

//获取时间方法
function getDateFunction(AddDayCount) {
    var dd = new Date();
    dd.setDate(dd.getDate() + AddDayCount);//获取AddDayCount天后的日期
    var y = dd.getFullYear();
    var m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1);//获取当前月份的日期，不足10补0
    var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();//获取当前几号，不足10补0
    return y + "-" + m + "-" + d;
}

//获取月份方法
function getMonthFunction(AddDayCount) {
    var dd = new Date();
    var year = dd.getFullYear(); //获取当前日期的年份
    var month = dd.getMonth() + 1; //获取当前日期的月份
    var days = new Date(year, month, 0);
    days = days.getDate(); //获取当前日期中月的天数
    var year2 = year;
    var month2 = parseInt(month) + AddDayCount;
    if (month2 == 0) {//如果是1月份，则取上一年的12月份
        year2 = parseInt(year2) - 1;
        month2 = 12;
    }
    if (month2 < 10) {
        month2 = '0' + month2;//月份填补成2位。
    }
    var t2 = year2 + '-' + month2;
    return t2;
}

//判断两个日期是否相差3个月（开始时间和结束时间都不能为空）
function check3MonthsFunction(startDate,endDate) {
    var time1 = new Date(startDate).getTime();
    var time2 = new Date(endDate).getTime();
    //判断时间跨度是否大于3个月
    var arr1 = startDate.split('-');
    var arr2 = endDate.split('-');
    arr1[1] = parseInt(arr1[1]);
    arr1[2] = parseInt(arr1[2]);
    arr2[1] = parseInt(arr2[1]);
    arr2[2] = parseInt(arr2[2]);
    var flag = true;
    if(arr1[0] == arr2[0]){//同年
        if(arr2[1]-arr1[1] > 3){ //月间隔超过3个月
            flag = false;
        }else if(arr2[1]-arr1[1] == 3){ //月相隔3个月，比较日
            if(arr2[2] > arr1[2]){ //结束日期的日大于开始日期的日
                flag = false;
            }
        }
    }else{ //不同年
        if(arr2[0] - arr1[0] > 1){
            flag = false;
        }else if(arr2[0] - arr1[0] == 1){
            if(arr1[1] < 10){ //开始年的月份小于10时，不需要跨年
                flag = false;
            }else if(arr1[1]+3-arr2[1] < 12){ //月相隔大于3个月
                flag = false;
            }else if(arr1[1]+3-arr2[1] == 12){ //月相隔3个月，比较日
                if(arr2[2] > arr1[2]){ //结束日期的日大于开始日期的日
                    flag = false;
                }
            }
        }
    }
    if(!flag){
        return false;
    }
    return true;
}

function checkFileNameLength(file) {
    var pic1 = $(file).val(); //获取input框的值，文件路径
    var strs = pic1.split('\\'); //分成数组存储
    var suffix = strs[strs.length - 1]; //获取文件后
    if (suffix.length > 60) {
        return true;
    }
}

//form表单提交（实体+文件）方法
//formName: 表单id属性
//url: 提交路径url
//yesCallBack： 成功后执行的函数
//modelName： 模态框id属性 用于关闭模态框
function uploadFile(formName, url, yesCallBack, modelName){
    var form = document.getElementById(formName);
    var formd = new FormData(form);
    var xhr;
    xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
    xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
    xhr.setRequestHeader("accept","application/json");
    xhr.onerror = uploadFailed; //请求失败

    xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】
    xhr.upload.onloadstart = function () {//上传开始执行方法
        ot = new Date().getTime();   //设置上传开始时间
        oloaded = 0;//设置上传开始时，以上传的文件大小为0
        //有文件的情况下需要提示
        if ($('#file').val() != null && $('#file').val() != "") {
            //document.getElementById("msg").innerHTML = "<span style='color: red;'>正在处理数据，请稍候...</span>";
            var msg = $("#msg");
            if(null != msg){
                msg.html("<span style='color: red;'>正在处理数据，请稍候...</span>");
            }
            //显示进度条
            $("#myModal_add_progressBar_Module").css("display", "block");
        }
    };

    //隐藏“提交”按钮
    $("#submitBtn").css("display", "none");
    // HUEFB2-1231 【上传测试包】上传文件A的时候，选择文件B进行上传，出现负值。
    // HUEFB2-1232 【终端上传测试包】网络断了，提示上传失败后，再次点击上传文件。速度和上传时间出现负值。
    // HUEFB2-1233 【上传测试包】选择一个文件，然后点击文件上传，速度和剩余时间出现负值。
    // 显示文件上传按钮
    $('#file').css("display","none");
    //禁用了右上角按钮
    $("#closeModal").attr("disabled", true);
    //禁用取消按钮
    $("#cancelEnable").attr("disabled", true);
    //开始上传，发送form数据
    xhr.send(formd);

    //处理实时回调信息
    xhr.onreadystatechange = function () {
        var readyState = xhr.readyState;

        //若响应完成且请求成功
        if (readyState == 4 && xhr.status == 200) {
            //得到服务器返回的信息
            if ("SUCCESS" == xhr.responseText) {
                promptMsg("保存成功！");
                $(modelName).modal("hide");
                yesCallBack();
            } else {
                if(isJSON(xhr.responseText)){
                    var parse = JSON.parse(xhr.responseText);
                    promptMsg(parse.errorReason);
                } else {
                    promptMsg(xhr.responseText);
                }
                //启用了右上角按钮
                $("#closeModal").attr("disabled", false);
                //启用取消按钮
                $("#cancelEnable").attr("disabled", false);
                //隐藏进度条
                $("#myModal_add_progressBar_Module").css("display", "none");
                document.getElementById("msg").innerHTML = "";
            }
        }
        //显示“提交”按钮
        $("#submitBtn").css("display", "inline-block");
        // 显示文件上传按钮
        $('#file').css("display", "inline-block");
    }
}

//上传失败
function uploadFailed(evt) {
    promptMsg("上传失败");
    //启用右上角按钮
    $("#closeModal").attr("disabled", false);
    //启用取消按钮
    $("#cancelEnable").attr("disabled", false);
}

//上传进度实现方法，上传过程中会频繁调用该方法
function progressFunction(evt) {
    // event.total是需要传输的总字节，event.loaded是已经传输的字节。如果event.lengthComputable不为真，则event.total等于0
    if (evt.lengthComputable) {
        $("#myModal_add_progressBar").css("width", Math.round(evt.loaded / evt.total * 100) + "%");
        $("#myModal_add_progressBar").html(Math.round(evt.loaded / evt.total * 100) + "%");
        $("#percentage").html("已上传" + Math.round(evt.loaded / evt.total * 100) + "%");
    }
    var nt = new Date().getTime();//获取当前时间
    var pertime = (nt - ot) / 1000; //计算出上次调用该方法时到现在的时间差，单位为s
    ot = new Date().getTime(); //重新赋值时间，用于下次计算
    var perload = evt.loaded - oloaded; //计算该分段上传的文件大小，单位b
    oloaded = evt.loaded;//重新赋值已上传文件大小，用以下次计算
    //上传速度计算
    var speed = perload / pertime;//单位b/s
    var bspeed = speed;
    var units = 'b/s';//单位名称
    if (speed / 1024 > 1) {
        speed = speed / 1024;
        units = 'k/s';
    }
    if (speed / 1024 > 1) {
        speed = speed / 1024;
        units = 'M/s';
    }
    speed = speed.toFixed(1);
    //剩余时间
    var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1);
    $("#time").html('<br/>速度：' + speed + units + '<br/>剩余时间：' + resttime + 's');
}